Reconciliación V2
Movimientos contables (GL / JournalItem) VS Los movimientos importados (Import / ReconciliationImport).
Casos de Uso
En cada caso hay una tabla con los movimientos emparejados. Los colores marcan exactamente qué parte del texto coincide entre ambos lados — cuando dos celdas tienen la misma parte pintada del mismo color, esa es la coincidencia que hizo el match.
| Color | ¿Qué marca? |
|---|---|
| Verde | El valor que suma cero entre ambos lados del par |
| Amarillo | La Reference (o parte de ella) que aparece incrustada dentro del History |
| Azul | La Reference que es idéntica en ambos lados |
| Naranja | La fecha del asiento coincidente |
| Púrpura | El prefijo de cheque que junta ambos lados |
Caso 1 — Match 1:1 por Reference contenida en el History
Título: "Encontré un pago cuyo número de referencia aparece escrito dentro de la descripción del asiento contable".
Cuándo aplica: El extracto trae un Reference (por ejemplo TRX-98765) y el asiento del GL menciona esa misma cadena dentro de su Description. Los montos deben ser exactamente opuestos.
Ejemplo:
| Origen | Reference | Description | Valor |
|---|---|---|---|
| Import | TRX-98765 | Depósito cliente Acme | +1.500,00 |
| GL | JV-0012 | Cobranza factura TRX-98765 Acme | −1.500,00 |
¿Qué coincide?
- 🟡 TRX-98765 del Import aparece dentro del History del GL.
- 🟢 1.500,00 es idéntico en valor absoluto, con signos opuestos.
Caso 2 — Match 1:1 GL ↔ Import por valor exactamente opuesto
Título: "Cuadro un asiento con un movimiento importado porque tienen el mismo importe con signo contrario".
Cuándo aplica: El criterio obligatorio es que los montos se anulen (mismo importe con signo contrario). A ese match base se le pueden sumar filtros opcionales según los parámetros de entrada, y los ejemplos de abajo muestran cada uno por separado — pero en la ejecución real los flags son acumulables: si activas dos, ambos filtros se aplican a la vez. Los items ya usados en el Caso 1 quedan excluidos.
| Filtro opcional | Flag que lo activa | Qué exige adicionalmente |
|---|---|---|
| Fecha | @isByJournalDate = 1 | Misma JournalDate en ambos lados |
| Referencia | @isByReference = 1 | Misma Reference exacta |
| Cheque | @isByCheckNumber = 1 | GL.Reference empieza con CH-<Import.Reference> |
Ejemplo básico (sin filtros opcionales)
| Origen | Reference | Fecha | Valor |
|---|---|---|---|
| GL | JV-045 | 2026-03-10 | +2.300,00 |
| Import | BK-778 | 2026-03-11 | −2.300,00 |
¿Qué coincide?
- 🟢 2.300,00 con signos opuestos suma cero. Único criterio.
Ejemplo con @isByJournalDate = 1 (exigir misma fecha)
| Origen | Reference | Fecha | Valor |
|---|---|---|---|
| GL | JV-045 | 2026-03-10 | +2.300,00 |
| Import | BK-778 | 2026-03-10 | −2.300,00 |
¿Qué coincide?
- 🟠 2026-03-10 — misma fecha.
- 🟢 2.300,00 — valor opuesto.
Ejemplo con @isByReference = 1 (exigir misma referencia)
| Origen | Reference | Fecha | Valor |
|---|---|---|---|
| GL | INV-2026-042 | 2026-03-10 | +2.300,00 |
| Import | INV-2026-042 | 2026-03-11 | −2.300,00 |
¿Qué coincide?
- 🔵 INV-2026-042 — misma referencia exacta.
- 🟢 2.300,00 — valor opuesto.
Ejemplo con @isByCheckNumber = 1 (prefijo de cheque)
Prefijo configurado en @referenceCheck = 'CH'. El GL debe empezar con CH-<Reference-del-Import>.
| Origen | Reference | Valor |
|---|---|---|
| GL | CH-1200-A | +800,00 |
| Import | 1200 | −800,00 |
¿Qué coincide?
- 🟣 CH- es el prefijo obligatorio del cheque.
- 🔵 1200 es el número que viene del Import y aparece justo después del prefijo en el GL.
- 🟢 800,00 con signos opuestos.
Caso 3 — Match 1:1 GL ↔ Import por valor opuesto con hasta 5 días de diferencia
Título: "Cuadro un asiento con un movimiento importado que tiene el importe contrario, cuando el banco lo registró con unos pocos días de diferencia".
Cuándo aplica: Su única regla es que los montos se anulen (mismo importe con signo contrario) y que las fechas de ambos lados no disten más de 5 días naturales. No usa @isByJournalDate ni ningún otro filtro opcional; no mira referencia ni cheque. Cuando hay varios candidatos, gana el de fecha más cercana para mantener un match limpio 1:1. Los items ya usados en los Casos 1 y 2 quedan excluidos.
Ejemplo:
| Origen | Reference | Fecha | Valor |
|---|---|---|---|
| GL | JV-030 | 2026-03-10 | +1.200,00 |
| Import | BK-660 | 2026-03-14 | −1.200,00 |
¿Qué coincide?
- 🟢 1.200,00 con signos opuestos suma cero.
- 🟠 2026-03-10 vs 2026-03-14 — 4 días de diferencia, dentro de la ventana de 5 días.
Caso 4 — Match 1:1 GL ↔ Import por valor opuesto (cierre)
Título: "Empato lo que quedó suelto: un asiento contable con un movimiento importado del mismo importe y signo contrario, sin ninguna otra condición".
Cuándo aplica: Es el paso final. Empareja 1:1 un GL con un Import del mismo valor absoluto y signo contrario (sus valores suman cero), sin exigir fecha, referencia ni número de cheque. Siempre es GL contra Import, así que un Import nunca se concilia con otro Import. Cuando hay varios del mismo importe se emparejan por orden de aparición; si sobra un movimiento sin contraparte opuesta (por ejemplo dos +100 contra un solo −100), ese sobrante queda sin conciliar. Los items ya usados en los Casos 1, 2 y 3 quedan excluidos.
Ejemplo:
| Origen | Reference | Valor |
|---|---|---|
| GL | JV-210 | +500,00 |
| Import | BK-880 | −500,00 |
¿Qué coincide?
- 🟢 500,00 — mismo valor absoluto con signos opuestos, así que suman cero.
- Es el mismo criterio de valor del Caso 2, pero sin filtros opcionales ni posición ordinal: recoge los pares GL ↔ Import que quedaron pendientes.
Caso 5 — Match 1:1 GL ↔ GL por valor opuesto
Título: "Dos asientos contables se anulan entre sí sin necesidad de un movimiento importado".
Cuándo aplica: Reversos contables o traspasos internos que no llegan al banco. Empareja 1:1 un GL positivo con un GL negativo del mismo valor absoluto y signo contrario (suman cero). Ningún Import participa. Los items ya usados en los Casos 1 a 4 quedan excluidos.
Ejemplo:
| Origen | Reference | Valor |
|---|---|---|
| GL (+) | JV-100 | +4.200,00 |
| GL (−) | JV-101-REV | −4.200,00 |
¿Qué coincide?
- 🟢 4.200,00 — mismo valor absoluto con signos opuestos entre dos asientos contables.
Orden y prioridad de ejecución
Cada paso opera sólo sobre los items que quedaron libres después del paso anterior. Todos los casos son emparejamientos 1:1 en los que los dos movimientos se anulan por signo opuesto (mismo valor absoluto, signos contrarios). Los Casos 1 a 4 son siempre 1 Import ↔ 1 GL, y se distinguen por el criterio adicional: referencia dentro del History (Caso 1), valor + filtros opcionales (Caso 2), ventana de fechas (Caso 3) y solo valor como cierre (Caso 4). El Caso 5 es 1 GL ↔ 1 GL (reversos contables). En ningún caso se concilia Import con Import.
Cómo se guarda el resultado
Cuando hay al menos un grupo armado, el procedimiento lo persiste en la tabla dbo.Reconciliation:
- Toma el
NextReconciliationCodedeReconciliationConfigy lo incrementa por la cantidad de grupos creados, de modo que cada grupo recibe un código correlativo propio. - Inserta una fila por cada movimiento del grupo con:
JournalItemId(si el movimiento es GL) oReconciliationImportId(si es Import).- El
Codedel grupo, laReconciliationDatey elReconciliationByUserName. IsConfirmed = 0, es decir, la conciliación queda pendiente de confirmación.IsRoot, que marca el movimiento principal del grupo (en los pares 1:1 es el lado que corresponde según la naturaleza de la cuenta; en el Caso 4 es el primer miembro del grupo).